﻿using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using Neturion.Dados;
using Neturion.IRepositorios;

namespace Neturion.Repositorios
{
    public class RepositorioConfiguracaoSistema : IRepositorioConfiguracaoSistema
    {
        public ConfiguracaoSistema Inserir(ConfiguracaoSistema configuracaoSistema)
        {
            configuracaoSistema.DataCadastro = configuracaoSistema.DataCadastro.HasValue
                                                ? configuracaoSistema.DataCadastro.Value.Date
                                                : configuracaoSistema.DataCadastro;
            configuracaoSistema.FimVigencia = configuracaoSistema.FimVigencia.HasValue
                                                ? configuracaoSistema.FimVigencia.Value.Date
                                                : configuracaoSistema.FimVigencia;
            configuracaoSistema.InicioVigencia = configuracaoSistema.InicioVigencia.HasValue
                                                ? configuracaoSistema.InicioVigencia.Value.Date
                                                : configuracaoSistema.InicioVigencia;

            GerenciadorBDConfigs.Instance.SessaoAtual().Save(configuracaoSistema);

            return configuracaoSistema;
        }

        public ConfiguracaoSistema Atualizar(ConfiguracaoSistema configuracaoSistema)
        {
            ConfiguracaoSistema tmpConfiguracaoSistema = ObterPorId(configuracaoSistema.ConfiguracaoSistemaId);
            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados
            tmpConfiguracaoSistema.NumeroDeResultados = configuracaoSistema.NumeroDeResultados;
            tmpConfiguracaoSistema.NumeroItensComboBox = configuracaoSistema.NumeroItensComboBox;
            tmpConfiguracaoSistema.TamanhoCodigos = configuracaoSistema.TamanhoCodigos;
            tmpConfiguracaoSistema.TamanhoDescricoes = configuracaoSistema.TamanhoDescricoes;
            tmpConfiguracaoSistema.Sistema = configuracaoSistema.Sistema;
            tmpConfiguracaoSistema.DataCadastro = configuracaoSistema.DataCadastro.HasValue
                                                    ? configuracaoSistema.DataCadastro.Value.Date
                                                    : configuracaoSistema.DataCadastro;
            tmpConfiguracaoSistema.FimVigencia = configuracaoSistema.FimVigencia.HasValue
                                                    ? configuracaoSistema.FimVigencia.Value.Date
                                                    : configuracaoSistema.FimVigencia;
            tmpConfiguracaoSistema.InicioVigencia = configuracaoSistema.InicioVigencia.HasValue
                                                    ? configuracaoSistema.InicioVigencia.Value.Date
                                                    : configuracaoSistema.InicioVigencia;
            tmpConfiguracaoSistema.FlagAtivado = configuracaoSistema.FlagAtivado;
            tmpConfiguracaoSistema.NumeroSerie = configuracaoSistema.NumeroSerie;
            tmpConfiguracaoSistema.TamanhoTextoObservacao = configuracaoSistema.TamanhoTextoObservacao;

            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(tmpConfiguracaoSistema);
            return tmpConfiguracaoSistema;
        }

        public void Excluir(ConfiguracaoSistema configuracaoSistema)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(configuracaoSistema);
        }

        public IList<ConfiguracaoSistema> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(ConfiguracaoSistema));
            return criteria.List<ConfiguracaoSistema>() as List<ConfiguracaoSistema>;
        }

        public ConfiguracaoSistema ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<ConfiguracaoSistema>(id);
        }

        public ConfiguracaoSistema ObterPorSistema(Sistema sistema)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(ConfiguracaoSistema))
                .Add(Restrictions.Eq("Sistema", sistema))
                .UniqueResult<ConfiguracaoSistema>();
        }
    }
}